/**
 * Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved.
 *
 * 基于人眼视觉感知的可变帧率配置
 * 
 * 原理：当属性变化量小于人眼的最小可觉差(JND)时，
 * 可以安全降低帧率而不影响视觉质量
 *
 * @flow strict-local
 * @format
 */

'use strict';

/**
 * 帧率档位定义
 */
export const FRAME_RATES: {|
  HIGH: number,
  MID: number,
  LOW: number,
|} = {
  HIGH: 60,   // 高速变化：需要最高流畅度
  MID: 30,    // 中速变化：30fps对大多数人足够流畅
  LOW: 15,    // 低速变化：变化极慢时可接受
};

/**
 * 基于JND(Just Noticeable Difference)的阈值配置
 * 
 * 阈值计算依据：
 * - opacity JND ≈ 0.02-0.03
 * - translate JND ≈ 2-3px
 * - scale JND ≈ 0.01-0.02
 * - rotate JND ≈ 1-2°
 * 
 * 速度阈值 = JND × 帧率 × 安全系数(1.5)
 */
export type ThresholdConfig = {|
  HIGH_VELOCITY: number,  // 高于此速度使用高帧率
  LOW_VELOCITY: number,   // 低于此速度使用低帧率
|};

export const THRESHOLDS: {|
  opacity: ThresholdConfig,
  translate: ThresholdConfig,
  scale: ThresholdConfig,
  rotate: ThresholdConfig,
|} = {
  // opacity范围：0-1
  opacity: {
    HIGH_VELOCITY: 0.5,   // > 0.5/s 使用60fps
    LOW_VELOCITY: 0.15,   // < 0.15/s 使用15fps
  },
  
  // translate单位：像素
  translate: {
    HIGH_VELOCITY: 120,   // > 120px/s 使用60fps
    LOW_VELOCITY: 30,     // < 30px/s 使用15fps
  },
  
  // scale范围：通常0.5-2
  scale: {
    HIGH_VELOCITY: 0.8,   // > 0.8/s 使用60fps
    LOW_VELOCITY: 0.2,    // < 0.2/s 使用15fps
  },
  
  // rotate单位：度
  rotate: {
    HIGH_VELOCITY: 90,    // > 90°/s 使用60fps
    LOW_VELOCITY: 20,     // < 20°/s 使用15fps
  },
};

/**
 * 帧率切换滞后配置
 * 防止在阈值边界频繁切换帧率
 */
export const HYSTERESIS: {|
  stableFramesRequired: number,
  immediateUpgrade: boolean,
  enableDebugLog: boolean,
|} = {
  stableFramesRequired: 0,    // 降帧立即响应（0=立即，>0=需要稳定帧数）
  immediateUpgrade: true,     // 升帧立即响应（保证流畅度）
  enableDebugLog: false,      // 调试日志开关（生产环境应关闭，调试时可开启）
};

/**
 * 获取默认配置
 */
export function getDefaultConfig(): {|
  frameRates: typeof FRAME_RATES,
  thresholds: typeof THRESHOLDS,
  hysteresis: typeof HYSTERESIS,
|} {
  return {
    frameRates: {...FRAME_RATES},
    thresholds: {...THRESHOLDS},
    hysteresis: {...HYSTERESIS},
  };
}

